import type { Component } from "vue";

// 定义菜单信息
export interface MenuInfo {
    id: number;
    name: string;
    icon: Component;
    routPath: string;
    children?: MenuInfo[];
}

// 定义选择框
export interface SelectOption {
    key: string,          // 值
    value: string           // 显示名称
}

// 定义菜单信息list
// export interface MenuInfo   

// 定义规则场景查询参数
export interface RuleScenariosQueryParams {
    scenariosKey: string;       // 规则场景key
    scenariosName: string;      // 规则场景名称
    isEnable: number;           // 是否启用
}

// 定义规则场景新增/修改参数
export interface RuleScenariosSave {
    id: string;                     // 规则场景id
    scenariosKey: string;           // 规则场景key
    scenariosName: string;          // 规则场景名称
    conditionModelName: string;     // 条件模型名称
    resultModelName: string;        // 结果模型名称
    description: string;            // 规则场景描述
    isEnable: number;               // 是否启用
}

export interface RuleScenariosInfo {
    id: string;                     // 规则场景id
    scenariosKey: string;           // 规则场景key
    scenariosName: string;          // 规则场景名称
    conditionModelName: string;     // 条件模型名称
    resultModelName: string;        // 结果模型名称
    description: string;            // 规则场景描述
    isEnable: number;               // 是否启用
}

// 业务模型信息

// 定义业务模型查询参数
export interface BusinessModelQueryParams {
    modelName: string;              // 业务模型名称
    modelKey: string;               // 业务模型key
    isEnable: number;               // 是否启用
}

export interface BusinessModelSave {
    id: string;
    modelName: string;              // 业务模型名称
    modelKey: string;               // 业务模型key
    description: string;            // 业务模型描述
    isEnable: number;               // 是否启用
}

// 定义业务模型信息
export interface BusinessModelInfo {
    id: string;                     // 业务模型id
    modelName: string;              // 业务模型名称
    modelKey: string;               // 业务模型key
    description: string;            // 业务模型描述
    isEnable: number;               // 是否启用  
}

// 定义业务模型明细项查询参数
export interface BusinessModelItemQueryParams {
    modelKey: string;               // 业务模型key
    fieldName: string;              // 字段名称
    fieldKey: string;               // 字段key
    isEnable: number;               // 是否启用
}

// 定义业务模型明细项保存参数
export interface BusinessModelItemSave {
    id: string;                     // 明细项id
    modelKey: string;               // 业务模型key
    fieldName: string;              // 字段名称
    fieldKey: string;               // 字段key
    fieldValueType: string;         // 字段取值类型
    fieldType: string;              // 字段类型
    description: string;            // 明细项描述
    isEnable: number;               // 是否启用
}

// 定义业务模型明细项信息
export interface BusinessModelItemInfo {
    id: string;                     // 明细项id
    modelKey: string;               // 业务模型key
    fieldName: string;              // 字段名称
    fieldKey: string;               // 字段key
    fieldValueType: string;         // 字段取值类型
    fieldType: string;              // 字段类型
    description: string;            // 明细项描述
    isEnable: number;               // 是否启用
}

export interface BusinessModelOptionInfo {
    modelName: string;              // 业务模型名称
    modelKey: string;               // 业务模型key
}


// 枚举信息


// 定义枚举常量
export interface EnumConstantQueryParams {
    constantKey: string;            // 枚举常量key
    constantName: string;           // 枚举常量名称
    isEnable: number;               // 是否启用
}

export interface EnumConstantSave {
    id: string;                     // 枚举常量id
    constantKey: string;           // 枚举常量key
    constantName: string;          // 枚举常量名称
    description: string;           // 枚举常量描述
    itemType: string;               // 枚举常量明细项类型
    isEnable: number;              // 是否启用
}

export interface EnumConstantInfo {
    id: string;                     // 枚举常量id
    constantKey: string;           // 枚举常量key
    constantName: string;          // 枚举常量名称
    description: string;           // 枚举常量描述
    itemType: string;               // 枚举常量明细项类型
    isEnable: number;              // 是否启用
}

export interface ConstantItemSave {
    id: string;                     // 枚举常量明细项id
    constantKey: string;           // 枚举常量key
    itemKey: string;                // 常量明细项目key
    description: string;           // 明细项描述
    itemName: string;               // 明细项名称
}

export interface ConstantItemInfo {
    id: string;                     // 枚举常量明细项id
    constantKey: string;           // 枚举常量key
    itemKey: string;                // 常量明细项目key
    description: string;           // 明细项描述
    itemName: string;               // 明细项名称
}

export interface ConstantItemQueryParams {
    constantKey: string;            // 枚举常量key
    itemName: string;               // 明细项名称
    itemKey: string;                // 常量明细项目key
}


// 规则管理相关模型

// 规则查询参数
export interface RuleQueryParams {
    scenariosKey: string;           // 规则场景key
    ruleName: string;               // 规则名称
    isEnable: number;               // 是否启用
}

export interface RuleInfo {
    id: string;                                             // 规则id
    ruleName: string;                                       // 规则名称
    scenariosKey: string;                                   // 规则场景key
    condtitonDetail: [RuleConditionItemInfo];               // 条件明细
    resultDetail: [RuleResultItemInfo];                     // 结果明细
    resultAction: string;                                   // 结果动作
    description: string;                                    // 规则描述
    startEffecTime: Date;                                   // 生效开始时间
    endEffecTime: Date;                                     // 生效结束时间
    isEnable: number;                                       // 是否启用
}

// 定义条件明细
export interface RuleConditionItemInfo {
    fieldKey: string;                 // 字段key
    fieldName: string;              // 字段名称
    fieldValueType: string;         // 字段值类型(基础类型basicType、自定义类型customType、枚举类型enumConstant)
    type: string;                   // 类型（fieldValueType为basicType时，type为string、long等基础类型、为customType时，type为customTypeKey、为enumConstant时，type为enumConstantKey）
    fieldBasicType: string;           // 基础类型(只能为long、string等基础类型)
    operator: string;               // 操作符
    targetValue: StructValue;       // 目标值
}

// 定义目标类型
export interface StructValue {
    valueType: string;                  // 取值类型（单值、范围值、集合值）
    single: object;                     // 单值 
    range: object;                      // 范围值
    list: object;                       // 集合值
}

// 定义结果明细
export interface RuleResultItemInfo {
    fieldKey: string;                 // 字段key
    fieldName: string;              // 字段名称
    fieldValueType: string;         // 字段值类型
    targetValue: string;            // 目标值
}



// 定义字段信息
export interface FieldInfo {
    modelKey: string;               // 业务模型key
    fieldName: string;              // 字段名称
    modelFieldName: string;         // 业务模型字段名称
    modelFieldZhName: string;       // 业务模型字段中文名称
    fieldValueType: string;         // 字段取值类型
    fieldType: string;              // 字段类型
    basicFieldType: string;          // 基础字段类型
}

// 操作符信息
export interface Operator {
    code: string;                    // 操作符code
    zhName: string;                    // 操作符名称
    aviatorExperssion: string;          // aviator表达式
    displayText: string;                // 显示文本
}